<?php
class AGasto {

	public function __construct() {
	}

	public function condicionPago(EFacade & $facade) {
		$ezpdo_=getManager();
		$session=$facade->session;
		$docFP = & $facade->getDocumentRoot();
		$proveedor=&$docFP->proveedor;
		if(!($proveedor->cuenta)){
			$cuentaProveedor = $ezpdo_->create('MCuentaProveedor');
			$cuentaProveedor->proveedor = $proveedor;
		}
		else
			$cuentaProveedor = &$proveedor->cuenta;
		/****** ponerlas el gasto completo en la cuenta proveedor **********/
		$montoGasti = stringToNumber($docFP->montoGasto);
		$histi = $session->create('MListaHistoricoCuentas');
		$histi->referencia = "Por pagar Gasto. ".$docFP->concepto;
		$histi->cuentaProveedor = $cuentaProveedor;
		$histi->saldo = $cuentaProveedor->saldo + $montoGasti;
		$histi->fecha = time();
		$histi->credito = $montoGasti;
		$histi->documento = $docFP;
		$histi->commit();
		$cuentaProveedor->saldo = $histi->saldo;
		$cuentaProveedor->commit();
		/******************************************************************/	
		$totalPagado=0;
		$formasPago=$docFP->formaPagoList;
		foreach($formasPago as $formaPago){
			$montoImpuesto=0;
			$montoPagado=stringToNumber($formaPago->montoPago);
			$totalPagado+=$montoPagado;
			if($formaPago->formaPago->cuentaBancaria)
				$cta = $formaPago->formaPago->cuentaBancaria->cuentaContable;
			else
				$cta = $formaPago->formaPago->cuentaCaja->cuentaContable;
			$cta->disminuye($montoPagado,$docFP);
			if($cuentaCaja=&$formaPago->formaPago->cuentaCaja!=NULL){
				$saldoCajaViejo=$cuentaCaja->saldo;
				$sql='FROM MTipoTransaccion as t where t.cuentaCaja.oid = ?';
				$transacciones=$ezpdo_->find($sql,$cuentaCaja->epGetObjectId());
				$tipoTransaccion=$transacciones[0];
				$montoAumento=0;
				if($porcentaje=$tipoTransaccion->porcentajeComision>0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoComision >0){
					$montoImpuesto-=$porcentaje;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->porcentajeImpuesto >0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoImpuesto >0){
					
					$montoImpuesto-=$porcentaje;
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esCaja=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				$transaccion=$session->create('MTransaccion');
				$fechaTransaccion=time();
				$montoTransaccion=$montoPagado;
				$transaccion->esCaja=TRUE;
				$transaccion->fechaTransaccion=$fechaTransaccion;
				$transaccion->montoTransaccion=$montoTransaccion;
				$transaccion->debe=$montoTransaccion;
				$detalle=" con ".$formaPago->formaPago->nombre." ".$formaPago->detalle;
				$descripcion=$docFP->proveedor->nombre." - Gasto ".$docFP->concepto .$detalle;
				$transaccion->descripcion=$descripcion;
				$transaccion->tipoTransaccion=$tipoTransaccion;
				$transaccion->cuentaCaja=$cuentaCaja;
				$transaccion->documento=$docFP;
				$saldoCajaNuevo=$saldoCajaViejo-$montoPagado+$montoImpuesto;
				$transaccion->saldoCuenta = $saldoCajaNuevo;
				$cuentaCaja->saldo=$saldoCajaNuevo;
				$transaccion->commit();
				$cuentaCaja->commit();
				
			} else {
				$cuentaCaja=&$formaPago->formaPago->cuentaBancaria;
				$saldoCajaViejo=$cuentaCaja->saldo;
				$sql='FROM MTipoTransaccion as t where t.cuentaBancaria.oid = ?';
				$transacciones=$ezpdo_->find($sql,$cuentaCaja->epGetObjectId());
				$tipoTransaccion=$transacciones[0];
				$montoAumento=0;
				if($porcentaje=$tipoTransaccion->porcentajeComision>0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoComision >0){
					$montoImpuesto-=$porcentaje;
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Comision  ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->porcentajeImpuesto >0){
					$montoNuevo=$montoPagado*$porcentaje/100;
					$montoImpuesto-=$montoNuevo;
					
					//transaccion por impuesto
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$montoNuevo;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." %";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				if($porcentaje=$tipoTransaccion->montoImpuesto >0){
					
					$montoImpuesto-=$porcentaje;
					
					$transaccion=$session->create('MTransaccion');
					$fechaTransaccion=time();
					$montoTransaccion=$porcentaje;
					$transaccion->esBanco=TRUE;
					$transaccion->fechaTransaccion=$fechaTransaccion;
					$transaccion->montoTransaccion=$montoTransaccion;
					$transaccion->debe=$montoTransaccion;
					$descripcion="Impuesto ".$porcentaje ." BsF";
					$transaccion->descripcion=$descripcion;
					$transaccion->tipoTransaccion=$tipoTransaccion;
					$transaccion->cuentaCaja=$cuentaCaja;
					$transaccion->commit();
					//echo "<br>la transaccion es: ",$transaccion;
					$facade->session->evictAll('MTransaccion');
				}
				
				//Crear la transaccion
				$transaccion=$session->create('MTransaccion');
				$fechaTransaccion=time();
				$montoTransaccion=$montoPagado+$montoImpuesto;
				$transaccion->esBanco=TRUE;
				$transaccion->fechaTransaccion=$fechaTransaccion;
				$transaccion->montoTransaccion=$montoTransaccion;
				$transaccion->debe=$montoTransaccion;
				$detalle=" con ".$formaPago->formaPago->nombre." ".$formaPago->detalle;
				$descripcion=$docFP->proveedor->nombre." - Gasto ".$docFP->concepto .$detalle;
				$transaccion->descripcion=$descripcion;
				$transaccion->tipoTransaccion=$tipoTransaccion;
				$transaccion->cuentaBanco=$cuentaCaja;
				$transaccion->documento=$docFP;
				$saldoCajaNuevo=$saldoCajaViejo-$montoPagado+$montoImpuesto;
				$transaccion->saldoCuenta = $saldoCajaNuevo;
				$cuentaCaja->saldo=$saldoCajaNuevo;
				$transaccion->commit();
				$cuentaCaja->commit();
			}
		}
		$docFP->totalPagado=$totalPagado;
		if($totalPagado>0){
			/****** ponerlas el abono completo en la cuenta proveedor **********/
			$histi = $session->create('MListaHistoricoCuentas');
			$histi->referencia = "Abono a Gasto. ".$docFP->concepto;
			$histi->cuentaProveedor = $cuentaProveedor;
			$histi->saldo = $cuentaProveedor->saldo - $totalPagado;
			$histi->fecha = time();
			$histi->debito = $totalPagado;
			$histi->documento = $docFP;
			$histi->commit();
			$cuentaProveedor->saldo = $histi->saldo;
			$cuentaProveedor->commit();
			/******************************************************************/				
		}
		$totalAPagar=stringToNumber($docFP->montoGasto);
		$docFP->montoGasto = $totalAPagar;
		$restantePorPagar=$totalAPagar-$totalPagado;
		$docFP->commit();
		$docFP->numero = $docFP->getDocumentNumber();	
		$condicionPago=$docFP->condicionPago;
		$proveedor->cuenta->commit();
		$montoCuentaPorCobrar=0;
		$montoTotal=$totalAPagar;
		$porcentajeRestante=0;
		if($restantePorPagar>0){
			$numero=1;
			$plazos= $condicionPago->plazo;
			$toti = 0;
			foreach($plazos as $plazo)
				if($plazo->diasPlazo != 0)
					$toti++;
			foreach($plazos as $plazo){
				if($plazo->diasPlazo != 0){
					$porcentaje=$plazo->porcentaje;
					$montoCuota=$montoTotal*$porcentaje/100;
					$diasPlazo=$plazo->diasPlazo;
					$segundosPlazo=$diasPlazo*86400;
					$fechaActual=time();
					$fechaVencimiento=$fechaActual+$segundosPlazo;
					$cuota=$session->create('MCuotaProveedor');
					$cuota->fechaVencimiento=$fechaVencimiento;
					$cuota->montoCuota=$montoCuota;
					$cuota->status=FALSE;
					$cuota->proveedor=$proveedor;
					$cuota->refFactura = $docFP->proveedor->nombre." - Cuota ".$numero."/".$toti." - ".floatToString($cuota->montoCuota)." - ".$docFP->numero." vence: ".dateToString($fechaVencimiento);
					$cuota->gasto=$docFP;
					$listaCuotas[]=$cuota;
					$cuota->commit();
					$numero++;
				}
			}
			/******* AFECTAR LAS CUENTAS POR PAGAR ****************/
			$docFP->cuentas[$docFP->cuentaAfectar]->aumenta($montoTotal,$docFP);
			$docFP->cuentas[$docFP->cuentaAfectar]->commit();
			/********************************************************/
		}
		$workflowFP = & $docFP->getWorkflowRef();
		$facade->session->refresh($workflowFP);
		$transSetFP = & EFacade :: getCurrentTransSetAuto($workflowFP, /* AGENT */	2);
		$transFP = & $transSetFP->getTransByName('t2');
		$user=NULL;
		$facade->fireTrans($transFP, $user, 'Generacion de Gasto', FALSE);
		$workflowFP->epSetDirty(TRUE);
		$docFP->epSetDirty(TRUE);
		$facade->saveWorkflow();	
	}
	
	public function totalPagos(EFacade & $facade) {
		 $docFP = & $facade->getDocumentRoot();
		 $todoPago=TRUE;
		$workflowFP = & $docFP->getWorkflowRef();
		$facade->session->refresh($workflowFP);
		$transSetFP = & EFacade :: getCurrentTransSetAuto($workflowFP, /* MTrans :: $TYPE_AUTO_AGENT */	2);
		if($todoPago){
			$transFP = & $transSetFP->getTransByName('t6');
		}
		else {
			$transFP = & $transSetFP->getTransByName('t5');
		}
		$user=NULL;
		$facade->fireTrans($transFP, $user, 'Verificación de pago completo', FALSE);
		$workflowFP->epSetDirty(TRUE); 
		$docFP->epSetDirty(TRUE); 
		$facade->saveWorkflow();	
		 	

		 
		 
		
	}
}
?>